package com.hundsun.hsOffer.freemarker;

import com.hundsun.hsOffer.model.SysDict;
import com.hundsun.hsOffer.utils.StringUtils;
import freemarker.core.Environment;
import freemarker.template.*;

import java.io.IOException;
import java.util.List;
import java.util.Map;

/**
 * Create By IDEA
 * User:giegie
 * Date:2016/8/19
 * Description:字典标签
 */
public class DictDirective implements TemplateDirectiveModel {
    /**
     *
     * @param env 系统环境变量，通常用它来输出相关内容，如Writer out = env.getOut();
     * @param params 自定义标签传过来的对象，其key=自定义标签的参数名，value值是TemplateModel类型，而TemplateModel是一个接口类型，通常我们都使用TemplateScalarModel接口来替代它获取一个String 值，如TemplateScalarModel.getAsString();当然还有其它常用的替代接口，如TemplateNumberModel获取number，TemplateHashModel等
     * @param loopVars 循环替代变量
     * @param body 用于处理自定义标签中的内容;当标签是<@myDirective />格式时，body=null
     */
    public void execute(Environment environment, Map map, TemplateModel[] templateModels, TemplateDirectiveBody templateDirectiveBody) throws TemplateException, IOException {
        SimpleScalar simpleScalar = (SimpleScalar) map.get("type");
        String type = simpleScalar.getAsString();
        if(StringUtils.isNotEmpty(type) && StringUtils.isNoneBlank(type)){
            List<SysDict> sysDictList = SysDict.dao.findByType(type);
            environment.setVariable("labels", ObjectWrapper.DEFAULT_WRAPPER.wrap(sysDictList));
        }
        if (templateDirectiveBody != null){
            templateDirectiveBody.render(environment.getOut());
        }
    }
}
